package org.example.java_chatroom.model;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Author @fiber-cloud
 * @Date 2025/11/4 11:23
 */
@Mapper
public interface FriendMapper {
    //查询用户的好友列表
    List<Friend> selectFriendList(int userId);

    /**
     * 根据用户ID和关键词搜索好友（模糊匹配好友名）
     * 需要关联用户表获取好友的用户名
     * @param userId 当前用户ID
     * @param keyword 搜索关键词
     * @return 匹配的好友列表
     */
    List<Friend> findFriendsByKeyword(@Param("userId") Integer userId,
                                      @Param("keyword") String keyword);


    List<Friend> findFriend(@Param("selfUserId") int selfUserId, @Param("friendName") String friendName);

    // 根据关键词搜索用户（用于添加好友）
    List<User> searchUsersByName(@Param("keyword") String keyword, @Param("excludeUserId") int excludeUserId);

    // 根据用户名精确查找用户
    User findUserByName(@Param("username") String username);

    // 添加好友请求
    int addFriendRequest(@Param("fromUserId") int fromUserId,
                         @Param("toUserId") int toUserId,
                         @Param("reason") String reason);

    // 查询收到的好友请求
    List<AddFriendRequest> getFriendRequests(@Param("toUserId") int toUserId);

    // 根据ID查询好友请求
    AddFriendRequest getFriendRequestById(@Param("requestId") int requestId);

    // 接受好友请求
    int acceptFriendRequest(@Param("requestId") int requestId);

    // 拒绝好友请求
    int rejectFriendRequest(@Param("requestId") int requestId);

    // 添加好友关系
    int addFriend(@Param("userId") int userId, @Param("friendId") int friendId);

    // 检查是否已经是好友
    int checkFriendExists(@Param("userId") int userId, @Param("friendId") int friendId);

    // 检查是否已经发送过好友请求
    int checkRequestExists(@Param("fromUserId") int fromUserId, @Param("toUserId") int toUserId);

}
